[use before def] handle class and function definitions#14203
[use before def] handle class and function definitions#14203ilinum merged 5 commits intopython:masterfrom
Conversation
3c5d21e to
82c8c9b
Compare
This comment has been minimized.
This comment has been minimized.
ilevkivskyi
left a comment
There was a problem hiding this comment.
LG, but I have few questions/suggestions.
| o.body.accept(self) | ||
|
|
||
| def visit_class_def(self, o: ClassDef) -> None: | ||
| self.process_definition(o.name) |
There was a problem hiding this comment.
Why do we have enter_scope() for functions but not for classes? A variable defined in a class body will not be visible outside (as a variable, will still be available as an attribute of course)
There was a problem hiding this comment.
Yep, good point. Added enter and exit scope calls (with tests that were failing before)
| [case testUseBeforeDefFunc] | ||
| # flags: --enable-error-code partially-defined --enable-error-code use-before-def | ||
| foo() # E: Name "foo" is used before definition | ||
| def foo(): pass |
There was a problem hiding this comment.
Just in case, could you please add test for classes within functions and vice versa? Also maybe add a test where a variable is defined in a class and then is being red outside of class.
|
According to mypy_primer, this change has no effect on the checked open source code. 🤖🎉 |
Previously, we would ignore any class definitions and would fail to detect undefined classes and functions. This updates the logic to handle them.
Closes #686